package gx.service.common;


import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;

import gx.dao.common.BaseDao;
import gx.entity.common.Page;




/**
 * 业务服务器的基类，主要实现了一些常用的CRUD操作。<br/>
 * 在具体使用时，子类需要注入真实的Dao实例，所以子类中一定要调用本类中的setDao()来注入。
 * @param <T> 要操作的类型
 */
public abstract class BaseService<T> {
	private BaseDao<T> dao;
	
	/**这个方法一定要在子类中调用，传入真实的Dao实例*/
	public void setDao(BaseDao<T> dao) {
		this.dao = dao;
	}
	
	public Session getSession(){
		return dao.getSession();
	}
	
	public void save(T entity) {
		dao.save(entity);
	}
	public void update(T entity) {
		dao.update(entity);
	}
	public void delete(T entity) {
		dao.delete(entity);
	}
	public void delete(Serializable id) {
		dao.delete(id);
	}
	
	public T get(Serializable id){
		return dao.get(id);
	}
	public T load(Serializable id) {
		return dao.load(id);
	}
	
	public List<T> findAll(){
		return dao.findAll();
	}
	public List<T> findAll(String orderByProperty, boolean desc) {
		return dao.findAll(orderByProperty, desc);
	}
	
	public Page<T> findByPager(int pageSize, int pageNo) {
		return dao.findByPager(pageSize, pageNo);
	}
	public Page<T> findByPager(int pageSize, int pageNo, String orderByProperty, boolean desc) {
		return dao.findByPager(pageSize, pageNo, orderByProperty, desc);
	}
	
	public List<T> find(String hql, Object... values) {
		return dao.find(hql, values);
	}
	public Page<T> find(int pageSize, int pageNo, String hql, Object... values) {
		return dao.find(pageSize, pageNo, hql, values);
	}
	
	public List<T> getBatch(Serializable ids){
		return dao.getBatch(ids);
	}
	
	public T findUniqueResult(String hql, Object... values){
		return dao.findUniqueResult(hql, values);
	}
	
	public int batchExecute(String hql, Object... values){
		return dao.batchExecute(hql, values);
	}
	

	public void batchDelete(Serializable... id){
		dao.batchDelete(id);
	}
}

